home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 441 / dlibs12 / stime.c < prev    next >
C/C++ Source or Header  |  1990-11-23  |  1KB  |  55 lines

  1. #include <time.h>
  2. #include <errno.h>
  3.  
  4. extern    long    gemdos(), xbios();
  5.  
  6. time_t mktime(time)
  7.     register struct tm *time;
  8.     {
  9.     register time_t t = 0L;
  10.  
  11.     t |= (time->tm_hour) & 0x1F;
  12.     t <<= 6;
  13.     t |= (time->tm_min) & 0x3F;
  14.     t <<= 5;
  15.     t |= (time->tm_sec >> 1) & 0x1F;
  16.     t <<= 7;
  17.     t |= (time->tm_year - 80) & 0x7F;
  18.     t <<= 4;
  19.     t |= (time->tm_mon + 1) & 0x0F;
  20.     t <<= 5;
  21.     t |= (time->tm_mday) & 0x1F;
  22.     return(t);
  23.     }
  24.  
  25. void stime(rawtime)
  26.     time_t *rawtime;
  27.     {
  28.     time_t t = *rawtime;
  29.     register int *tp = (int *) &t, tt;
  30.  
  31.     gemdos(0x2D, (tt = tp[0]));    /* set time from high word */
  32.     gemdos(0x2B, (tp[0] = tp[1]));    /* set date from low word */
  33.     tp[1] = tt;            /* finish swapping words */
  34.     xbios(22, rawtime);        /* set keyboard clock also */
  35.     }
  36.  
  37. int utime(pathname, rawtime)
  38.     char *pathname;
  39.     register time_t *rawtime;
  40.     {
  41.     register int h;
  42.     time_t raw;
  43.  
  44.     if(!rawtime)
  45.         {
  46.         rawtime = &raw;                    /* current */
  47.         time(rawtime);                    /*  time   */
  48.         }
  49.     if((h = ((int) gemdos(0x3D, pathname, 2))) < 0)        /* open */
  50.         return(errno = h);                /* FAILURE */
  51.     gemdos(0x57, rawtime, h, 1);                /* timestamp */
  52.     h = ((int) gemdos(0x3E, h));                /* close */
  53.     return(errno = h);
  54.     }
  55.